// 类型推论
// 如果没有明确的指定类型，那么 TypeScript 会依照类型推论（Type Inference）的规则推断出一个类型。
let myFavoriteNumber = 'seven';
// myFavoriteNumber = 123 //error


// 联合类型
// 联合类型（Union Types）表示取值可以为多种类型中的一种。
let example: string | number;
example = 'seven';
example = 7;
// myFavoriteNumber = true; //error

// 当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候，我们只能访问此联合类型的所有类型里共有的属性或方法：
// function getLength(something: string | number): number {
//     return something.length; //error
// }

function getString(something: string | number): string {
    return something.toString();
}
getString('one')


// 联合类型的变量在被赋值的时候，会根据类型推论的规则推断出一个类型：
let p1: string | number;
p1 = 'seven';
console.log(p1.length); // 5
p1 = 7;
// console.log(p1.length); // error
